// 网络监控API客户端
class NetworkAPI {
    constructor() {
        this.baseURL = '/api';
    }

    // 获取网络数据 - 对应 GET /api/network
    async getNetworkData() {
        try {
            const response = await fetch(`${this.baseURL}/network`);
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return await response.json();
        } catch (error) {
            console.error('获取网络数据失败:', error);
            throw error;
        }
    }

    // 获取网速数据 - 对应 GET /speed
    async getSpeedData() {
        try {
            const response = await fetch('/speed');
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return await response.json();
        } catch (error) {
            console.error('获取网速数据失败:', error);
            throw error;
        }
    }

    // 获取网卡列表 - 对应 GET /api/interfaces
    async getInterfaceList() {
        try {
            const response = await fetch(`${this.baseURL}/interfaces`);
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return await response.json();
        } catch (error) {
            console.error('获取网卡列表失败:', error);
            throw error;
        }
    }

    // 获取版本信息 - 对应 GET /api/version
    async getVersionInfo() {
        try {
            const response = await fetch(`${this.baseURL}/version`);
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return await response.json();
        } catch (error) {
            console.error('获取版本信息失败:', error);
            throw error;
        }
    }

    // 数据格式化辅助方法（使用后端返回的格式化字符串）
    formatNetworkData(data) {
        // 后端已经提供了格式化字符串，直接使用
        if (data.interfaces) {
            Object.keys(data.interfaces).forEach(name => {
                const iface = data.interfaces[name];
                if (iface.speed) {
                    // 使用后端提供的格式化字符串
                    iface.displayDownloadSpeed = iface.speed.received_mbps_text || '0 Mbps';
                    iface.displayUploadSpeed = iface.speed.sent_mbps_text || '0 Mbps';
                    iface.displayTotalReceived = iface.speed.total_received_text || '0 B';
                    iface.displayTotalSent = iface.speed.total_sent_text || '0 B';
                    iface.displayPacketLoss = iface.speed.packet_loss_text || '0%';
                }
            });
        }
        return data;
    }

    // 构建网卡状态CSS类
    getInterfaceStatusClass(isVirtual, status) {
        if (status !== 'active') return 'inactive';
        return isVirtual ? 'virtual' : 'physical';
    }

    // 错误处理
    handleError(error, context = '网络API') {
        console.error(`${context}错误:`, error);
        
        // 根据错误类型返回用户友好的错误信息
        if (error.name === 'TypeError' && error.message.includes('fetch')) {
            return '网络连接失败，请检查服务器状态';
        } else if (error.message.includes('404')) {
            return 'API接口未找到';
        } else if (error.message.includes('500')) {
            return '服务器内部错误';
        } else {
            return error.message || '未知错误';
        }
    }
}

// 创建全局实例
window.networkAPI = new NetworkAPI();